home *** CD-ROM | disk | FTP | other *** search
/ Workbench Add-On / Workbench Add-On - Volume 1.iso / Text / Edit / XDme / Docs / XDME.doc < prev    next >
Text File  |  1994-08-09  |  45KB  |  1,164 lines

  1.  
  2. XDME.DOC           XDME version 1.54         Matthew Dillon
  3.                Aug 1994             Aaron Digulla
  4.  
  5. DME, (C)Copyright 1987-91, Matthew Dillon.  All Rights Reserved.
  6. This software may be distributed for non-profit only.  This software is
  7. FREEWARE, not shareware.
  8.  
  9.     Matthew Dillon
  10.     891 Regal Rd
  11.     Berkeley, Ca. 94708
  12.     USA
  13.  
  14. From now (1992) on, I (Aaron) will continue to enhance this thing since
  15. Matt refuses to do so. My address is :
  16.  
  17.     Aaron Digulla
  18.     Th.-Heuss-Str. 8
  19.     7750 Konstanz
  20.     Germany
  21.  
  22.     EMAIL: digulla@rz-uxazs.fh-konstanz.de
  23.  
  24. Note: From now on I'm (Aaron) responsible for enhancement & bugs. So if you
  25. have some idea/bugs/wishes/tips/etc., I will do it (if possible). Just write to
  26. me but don't expect an answer. I'm a VERY lazy letter-writer.
  27.  
  28.     Source is available on FISH-disk, EMail or you can send a disk with
  29.     return-envelope. (Note: I won't pay anything, ok ? So if you send a pure
  30.     disk, there is a 100% propability, that you will never see this disk
  31.     again. :-)
  32.  
  33.     Donations welcome but not solicited (We aren't starving artists).
  34.  
  35.     icon by Bryce Nesbitt
  36.  
  37.     text markers and the text-block stack by Kevin Seghetti (some of the new
  38.     commands for 1.30).
  39.  
  40.     AREXX interface (Bill Hawes' ARexx REXX language interpreter) ported
  41.     by Kim DeVaughn.
  42.  
  43.     1.42 additions by Markys Wenzel
  44.  
  45.     1.50 and up: AREXX of Kim DeVaughn removed and real AREXX interface by
  46.     D. Heckmann. Many enhancements (bugs removed and speedups) by A. Digulla.
  47.  
  48. ---------------------------------------------------------------------------
  49.  
  50.    Installation
  51.    Overview
  52.    Keymapping           key and mouse mapping
  53.    Command Sequences   DME commands
  54.    File Particulars    notes on loading and saving files,
  55.    Workbench Support
  56.    Compiling           Some notes on compiling this thing
  57.  
  58.                    INSTALLATION
  59.  
  60. Copy XDME to any place you want. If you want to run it from WB, copy
  61. the icon, too.
  62.  
  63. Copy S/.edrc to S:. If you have an old .edrc, copy it to S:.edrc_user.
  64. DO NOT EDIT S:.edrc. XDME will come with a new .edrc from time to time.
  65. Make all modifications in S:.edrc_user and you'll save yourself a lot
  66. of time.
  67.  
  68. If you don't have used XDME before, also copy S/XDME.prefs to S:. If you
  69. have a config file and XDME complains that the version is not correct,
  70. use Utils/CnvConfig/CnvConfig to update the file. CnvConfig will read
  71. the old config, make a backup copy and create a new version. All old
  72. settings will be preserved.
  73.  
  74.                  OVERVIEW
  75.  
  76. See history-file section for revisions.  XDME is an editor designed mainly for
  77. programmers.  Although it is not a word processor, it does include many word
  78. processing features such as Word-Wrap and automatic paragraph formatting.  Here
  79. is a quick 'features' list:
  80.  
  81.     -control language based on a rich command set accessed manually or via
  82.      arbitrary mapping of keys.  (Every key may be mapped to 1024 different
  83.      things via qualifier and mouse keys)
  84.  
  85.     -General variables, reference macros as variables, ENV: enviroment
  86.      variables (1.30C and beyond).
  87.  
  88.     -fast visual response (it scrolls quickly)...
  89.  
  90.     -title-line statistics showing your current position in the file, file
  91.      name, whether the file has been modified or not, etc...
  92.  
  93.     -Multiple Windows, ability to iconify windows
  94.  
  95.     -Word Wrap and automatic paragraph formatting.
  96.  
  97.     -ability to map any KEY or MOUSE BUTTON combination.
  98.  
  99. XDME has been designed to allow easy expansion, and I intend to make many
  100. future improvments.  It has not been designed for user friendliness, but is
  101. (mostly) straight forward if you read this document [care]fully.
  102.  
  103. Normally, XDME will automatically SOURCE two script files, S:.EDRC, and the
  104. .EDRC in your current directory. These files do not have to exist.  These
  105. script files usually contain mappings and do things (for example, turn on
  106. savetabs).
  107.  
  108. Some really important changes: (See History for less important changes)
  109.  
  110.     -XDME will no longer hang behind keyboard. You may now PAGEDOWN
  111.      and XDME will stop IMMEDIATELY when you release the key.
  112.  
  113.     -XDME uses less memory now i.e. it less fragments memory
  114.  
  115.     -Many routines have been improved. You will notice MUCH faster
  116.      displaying of text and searching.
  117.  
  118.     -Even better support of C-programmers. Many thing have been adapted
  119.      to suit more the needs of C-programmers. (i.e. paren-matching,
  120.      autoindent, splitting of long lines without reformat (!), better
  121.      scanf and if[else])
  122.  
  123. You may have noticed, that the title line changed. The title line is something
  124. like:
  125.  
  126.     143/1053   5 00 * xdme.doc
  127.      |     |     | |  |  +-------- filename
  128.      |     |     | |  +----------- "-": file is unchanged, "*": file has been
  129.      |     |     | |         changed since loading.
  130.      |     |     | +-------------- Code of char under cursor (HEX).
  131.      |     |     +---------------- Actual column.
  132.      |     +---------------------- Length of file in columns.
  133.      +-------------------------- Actual column
  134.  
  135.  
  136.                 INVOCATION
  137.  
  138. XDME scans the command-line for the following items:
  139.  
  140.     -n        - Open new XDME instead of sending an AREXX-Command to a running
  141.           XDME. See below.
  142.     -i        - Iconify all new windows.
  143.     -s file - Read local "file" instead of the local ".edrc". "S:.edrc"
  144.           is unaffected by this.
  145.     -ps name - open all further windows on this public screen
  146.     -pf file - use this file as projectfile (XDME stores the names of
  147.         all open windows, positions, etc. in there). If this
  148.         file exists when XDME is started, XDME will read it
  149.         and open all windows as specified in the file.
  150.  
  151. If you don't specify -n, XDME will try to find an already running XDME and
  152. send the appropriate AREXX-commands to this XDME to open the desired files
  153. and quit. This will also save some memory, but not much since XDME is PURE.
  154. The advantage is that you can only copy blocks between windows of ONE XDME
  155. (This doesn't affect clipboard, though). Also SEARCH/REPLACE-strings are
  156. global to one XDME.
  157.  
  158.  
  159.                  KEYMAPPING
  160.  
  161.                    MOUSE BUTTONS
  162.  
  163.     The mouse buttons and combinations thereof may now be mapped.  The default
  164.     mappings for the mouse buttons are as follows:
  165.  
  166.     Left-button:    Move cursor to current mouse position
  167.     Right-button:   Iconify window
  168.     Left-button held down while moving mouse tracks the cursor
  169.  
  170.     The iconification features:
  171.     -Remembers original window size and placement
  172.     -Remembers placement of iconified window when you re-iconify later.
  173.  
  174.     Currently, you will crash the machine if you run out of memory and XDME is
  175.     unable to open the icon window or original window, so be careful.
  176.  
  177.     See below for mapping the mouse buttons and mouse movement.
  178.  
  179.  
  180.                     KEYBOARD
  181.  
  182. The rest of the Functional interface for XDME is based on key/mouse/menu
  183. mappings and a rich command set.  Unlike other text editors, any
  184. non-qualifier key in XDME may be defined to have any meaning whatsoever.  It
  185. just so happens that the default keymappings assign such things as the
  186. (return) key to the RETURN function, the (up) key to the UP function,
  187. etc...    Keys are named by their keycap labels with the following
  188. exceptions:
  189.  
  190.     the name for Back-Space is    BS
  191.     the name for numeric keypad keys are prepended with an NK, except for
  192.        the Enter key which is named 'ENTER'.
  193.     The four cursor control keys are labeled UP, DOWN, LEFT, and RIGHT
  194.     The three mouse buttons are labeled RMB, MMB, and LMB.
  195.  
  196. NOTES:
  197.        You MUST type commands in lower-case, except for text, which can be
  198.        either lower or upper case, and for upper-case alpha keys when specifying
  199.        keymaps (i.e.  A and s-a are the same key).  The exception is the AMIGA
  200.        qualifier key, which uses 'A' instead of 'a'(Alt).
  201.  
  202.        Each key may be qualified with any combination of CTRL, ALT, SHIFT,
  203.        AMIGA, or any of the MOUSE buttons.  With 6 qualifiers (7 if your mouse
  204.        has a middle button), you can assign up to 64 (128) different maps to
  205.        each physical key on the keyboard.
  206.  
  207.        The CAPS-LOCK, when lit, is equivalent to SHIFT only for Alpha keys.
  208.  
  209.        The AMIGA-ALT (aA) combination isn't very usable since Intuition uses the
  210.        sequence to duplicate a Mouse SELECT.  Other AMIGA sequences are used by
  211.        intuition for mouse movement and other things. Some other qualifier
  212.        combinations may not be usable due to other special sequences.
  213.  
  214.        Some keys must be mapped by their lower-case keycap.  That is, to map the
  215.        '>' key (USA keyboard), you specify shift dot (s-.)
  216.  
  217.  
  218.     ***EXAMPLES:***
  219.  
  220.     tab     tab
  221.     a-a     ALT a
  222.     A-a     AMIGA a
  223.     sA-a    SHIFT AMIGA a
  224.     s-tab    SHIFT tab
  225.     c-tab    CTRL tab
  226.     ac-?    ALT-CTRL ?
  227.     s-f5    SHIFT F5
  228.     nk0     Numeric Keypad 0
  229.     cs-nk0    CTRL SHIFT Numeric Keypad 0
  230.     L-lmb    Left Mouse button pressed
  231.     L-mmove    Mouse moved while left mouse button held down
  232.     LR-lmb    left mouse button hit while right mouse button held down
  233.     s-.     shift . ('>' for USA keyboards)
  234.  
  235.     ***************
  236.  
  237.                 MAPPING MOUSE BUTTONS
  238.  
  239.     Mouse buttons serve both as QUALIFIERS and as KEYS.  Thus, you can map both
  240.     normal keystrokes which require a mouse button to be held down:
  241.  
  242.     map L-a ((left button and an a))
  243.  
  244.     as well as the mouse keys themselves:
  245.  
  246.     map L-lmb   ((left mouse key))
  247.  
  248.     note that you had to specify the left mouse button down qualifier L as well
  249.     as the left mouse button LMB.
  250.  
  251.     If you map the left mouse button, and also map a sequence such as left mouse
  252.     button + a:
  253.  
  254.     map L-lmb   tomouse
  255.     map L-a     ((hello))
  256.  
  257.     Note that the first mapping will always get executed even if you intended
  258.     L-a (that is, BOTH mappings would get executed).  In order to avoid
  259.     confusion you might want to UNMAP the system default mapping for the right
  260.     mouse button (mapped to ICONIFY) if you wish to apply combinations to the
  261.     right mouse button.
  262.  
  263.     MOUSE MOVEMENT is mapped with one or more mouse qualifiers (L, R, M), plus
  264.     'MMOVE' for the key.  That is:
  265.  
  266.     map LR-mmove ((moving the mouse with both buttons held down))
  267.  
  268.     Or how bout capping the characters under the mouse while moving the mouse?
  269.  
  270.     map LR-mmove (tomouse if cl (tlate -32))
  271.  
  272.  
  273.  
  274.                 DEFAULT KEYMAPPINGS:
  275.  
  276.     All Printable Ascii keys mapped to their ascii equivalent. BS, DEL, UP,
  277.     DOWN, LEFT, RIGHT, TAB, S-TAB, and ENTER are mapped properly.  These are the
  278.     default system keymappings.
  279.  
  280.     c-esc     recall last command-line
  281.     tab     insert tab
  282.     s-tab     remove tab, text to the left is OVERWRITTEN !
  283.     s-return `firstnb down'
  284.     s-     shift space to space
  285.     s-del     deline
  286.     c-c     map break to a nop
  287.     help     ref
  288.  
  289.     A-n     newwindow arpload
  290.     A-o     arpload
  291.     A-s     saveold
  292.     A-a     arpsave
  293.     A-q     quit
  294.     A-Q     quitall
  295.     A-z     undo
  296.     A-x     block bsave t:xdme_clip bdelete
  297.     A-c     block bsave t:xdme_clip unblock
  298.     A-v     split down first insfile t:xdme_clip
  299.     A-f     Ask for a string to search for and look for it
  300.     A-r     Ask for a string to search for and for one to replace the
  301.          search-string and do one search&replace
  302.     A-e     execute a shell-command
  303.     A-b     mark a block (mark beginning, mark end, ...)
  304.     A-i     iconify
  305.  
  306.     a-up     scroll up
  307.     a-down     scroll down
  308.     a-left     scroll left
  309.     a-right  scroll right
  310.  
  311.     s-up     page up
  312.     s-down     page down
  313.     s-right  page right
  314.     s-left     page left
  315.  
  316.     c-up     top (goto first line of text)
  317.     c-down     bottom (goto last line in text)
  318.     c-right  goto last character in line
  319.     c-left     goto beginning of line or, if already there, to the far left
  320.  
  321.     c-j     join lines
  322.     c-i     toggle insertmode
  323.     c-del     remove all characters to the right
  324.     c-w     toggle auto-wordwrap
  325.     c-g     execute a GOTO
  326.     c-l     insert a FF into the text (^L)
  327.     c-e     insert an ESC into the text (^[)
  328.     c-m     find matching paren. Supported are (), [], {} and `'.
  329.  
  330.     a-l     word-left
  331.     a-r     word-right
  332.     a-n     find next
  333.     a-p     find prev
  334.     a-f     reformat paragraph (take care !)
  335.     a-i     indent block one tab
  336.     a-I     outdent block one tab
  337.     a-b     like A-b
  338.     a-c     copy block to line ABOVE cursor
  339.     a-d     delete block (NO UNDO YET !!)
  340.     a-m     move block to line above cursor
  341.     a-s     save block to a file with filerequester
  342.  
  343.     L-lmb     tomouse
  344.     L-mmo     tomouse
  345.     R-rmb     iconify (only if no windows !)
  346.  
  347.  
  348.                  COMMAND SEQUENCES
  349.  
  350. XDME has a rich command set which allows you to embed commands within
  351. commands, or specify multiple commands in a row.  A command consists of a
  352. KEYWORD followed by a FIXED number of arguments (0, 1, 2...).  The argument
  353. delimeter in XDME is a SPACE.  Therefore, to embed strings containing spaces
  354. as a single argument, you must surround the string with (string)
  355. (backsinglequote-string-singlequote). TEXT to be written as if typed is
  356. also specified via a string in backquote-quotes.  For example:
  357.  
  358.     right right (hello) right right (hello) enter down
  359.     map f4 (right right) map f5 (left left)
  360.     map f4 ((hello))
  361.  
  362. Reiterating (because this is important!)... If a command expects ONE argument,
  363. then it really does expect a single argument, and any remaining arguments are
  364. thought to be the next command... so:
  365.  
  366.     map f4 right
  367.                     -right is only one word, so no need for ().
  368.     map f4 (right right)
  369.                     -we want to map f4 to two rights... we need
  370.                      the () or the second right will not be part
  371.                      of the map.
  372.  
  373.     map c-del (repeat cright del)
  374.                     -this is already implimented as REMEOL, but
  375.                      shown here for clarity.
  376.  
  377. Some arguments will eventually be fed through the command interpreter more than
  378. once.  The MAP command is a good example.  When you execute a MAP command, the
  379. first run through the command interpreter installs the map string minus a set of
  380. quotes.  So, if you want to specify text, you must enclose the text in two sets
  381. of ((text)) because the map string gets passed through the command interpreter
  382. again when you hit the mapped key.  Here are some more complex examples:
  383.  
  384.     map f4 (right right (hello) left left)      *RIGHT*
  385.     map f4 right right hello left left        *WRONG*
  386.  
  387.     map f4 (map f4 ((hello)))
  388.                     -the first time you hit F4, it's command is
  389.                      to re-map itself to the TEXT (hello).
  390.                      (gads!).
  391.  
  392.     map c-i (repeat tr (( )))
  393.                     -example of how to embed a space in a map
  394.                      and repeat (goes through command
  395.                      interpreter three times!).
  396.  
  397.  
  398. An easy way to fool around executing commands or making maps is either to use
  399. the ESC key (which enters command mode), or  a-S (alt-shift-s), which EXECUTES
  400. the current XDME line that the cursor is on.... so you can use XDME to edit
  401. and test your new keymappings.
  402.  
  403.  
  404.                 STRING VARIABLES
  405.  
  406.     String variables are replaced with their contents.    Three specification
  407.     forms are allowed:
  408.  
  409.     $varname        - varname can only consist of a-z,A-Z,0-9,-,_
  410.     $(varname)      - anything not containing a '(' or ')'
  411.     $`varname'      - anything not containing a '`' or '''
  412.  
  413.     Some special variables exist:
  414.  
  415.     filename    - the current full filename
  416.     fpath        - Path in current filename
  417.     fname        - Only name of text (without path)
  418.     scanf        - the current scanf'd string (see SCANF below)
  419.     lineno        - the current cursor line number (1 .. N)
  420.     colno        - the current cursor column number (1 .. N)
  421.     margin        - Current Margin
  422.     modified    - (0)1 if (not) modified
  423.     currentline - full current line
  424.  
  425.     Other variables cause a search of three variable domains to find the
  426.     contents.  For example, if you give  $DMEFONT:
  427.  
  428.     (1) An Internal variable named DMEFONT is searched for.  Internal
  429.         variables are case sensitive.  (see SET, UNSET)
  430.  
  431.     (2) An Enviroment variable name DMEFONT is searched for.  Enviroment
  432.         variables are NOT case sensitive.  (see SETENV, UNSETENV).  The 1.3
  433.         ENV: is used.
  434.  
  435.     (3) A XDME keymap or menu definition named DMEFONT is searched for.
  436.         This allows you to say something like $sa-tab to insert the
  437.         contents of the shift-alt-tab keymap.   (see MAP, UNMAP, and
  438.         MENU oriented commands).
  439.  
  440.     The reason for the other two forms of variable specifiction is to allow one
  441.     to access strangely named variables (with puncuation and other crap).
  442.  
  443.     SPECIAL NOTE:  What is wrong with this command?
  444.  
  445.     repeat 100 (first ($myvar))
  446.  
  447.     What is wrong is that $myvar is evaluated BEFORE the repeat is executed.
  448.     myvar might contain characters that would confuse the command specification
  449.     when.  That is, if myvar contained a '(' you could get something like:
  450.     repeat 100 (fist ((())  which is obviously incorrect.  By using \ you can
  451.     cause $myvar to be evaluated at loop-execution time rather than before:
  452.  
  453.     repeat 100 (first (\$myvar))
  454.  
  455.     NOTE: This is a highly frustrating thing: If you indent do something like
  456.     this
  457.  
  458.         map key `scanf word `\$scanf' ...'
  459.  
  460.     you will notice that it ain't work. The reason is that the \ is removed
  461.     when the mapping is done. When you press your key, the $scanf is
  462.     replaced PERMANENTLY and on every new invocation you will get same
  463.     results and not the new word. Therefore you have to do the following:
  464.  
  465.         map key `scanf word `\\\$scanf' ...'
  466.  
  467.     For every level you need two \s. THIS BEHAVIOR WILL BE GONE IN THE NEXT
  468.     RELEASE !
  469.  
  470.     These kinds of problems can also occur when you do keymaps... you probably
  471.     do not want to evaluate the variable at keymap-entry time, but rather would
  472.     want the variable evaluated at keymap-execution time.
  473.  
  474.     On the otherhand, this is perfectly allowable:
  475.  
  476.     set x (tlate +1)
  477.     repeat 100 ($x)
  478.  
  479.     Which executes the command (tlate +1) 100 times (i.e. inserts "tlate +1" 100
  480.     times in the text) ... By NOT surrounding the variable with parens (depends
  481.     on the situation), the variable is executed rather than inserted as text.
  482.  
  483.  
  484.                SPECIAL CHARACTERS
  485.  
  486.     ^ is used to introduce a control character.  For example, ^c would embed a
  487.     control-c.    You cannot embed c-@ (ascii code 0).
  488.  
  489.     backslash \ is used to override special meanings.  The next character is
  490.     overriden.
  491.  
  492.     map c-a ((^l))      -map control a to produce a control l
  493.     map c-a ((\\\^l))   -map control a to produce a "^l".  The first \ overides
  494.              the second, and the third overides the ^.
  495.  
  496. COMMAND LIST:
  497.  
  498.     General:
  499. (text)          -enter text as if typed.
  500. key        -execute a keymap as a macro (example:  c-a)
  501. header-item    -execute a menu item as a macro (example: Project-Save)
  502.         (case independent)
  503.  
  504.     Text-Editing:
  505. BACK        -same as BS
  506. BS        -backspace, (delete char to left of cursor)
  507. CLIPINS     -Insert contents of clipboard
  508. DEL        -delete, (deletes char under cursor)
  509. DELINE        -delete line
  510. DELINES n    -delete multiple lines
  511. DOWNADD     -cursor down.  If at bottom of text, add a line.
  512. INDENT what how -indent text. See below. This is a very powerfull command.
  513.         "what" specifies what to indent and "how" how to indent it.
  514.  
  515. INSFILE name    -insert a file into the current text.
  516. INSLINE     -insert line
  517. INSLINES n    -insert n lines at once
  518. JOIN        -join next line to line at cursor
  519. JUSTIFY how    -simple text justification.  Currently only 'full'
  520.          justification supported (justify full).
  521. REFORMAT    -reformat paragraph using the margin.
  522. REMEOL        -Remove text under and beyond the cursor.
  523. RETURN        -if AUTOINDENT is off: (FIRST DOWNADD) else insert line,
  524.          split current line and indent like last line above.
  525. SPLIT        -Split line at cursor
  526. TLATE how    -translate character under cursor. how can be one of the
  527.          following:
  528.  
  529.             number    - Replace character by the character with the
  530.                   code number. (i.e. 65=A). Number can be
  531.                   a decimal-, octal- or hexnumber.
  532.             [+-]number    - As above, but the actual character is used
  533.                   as offset: `tlate +1' makes a 'B' from an
  534.                   'A', `tlate -1' does the reverse. The
  535.                   resulting char-code is truncated to 8bit.
  536.             "x"         - Replace actual character by 'x'.
  537.             [Uu]    - Make character uppercase.
  538.             [Ll]    - Make character lowercase.
  539.  
  540. UNJUSTIFY    -removes extra spaces in a line
  541.  
  542.     Movement:
  543. BACKTAB     -backward tab
  544. BOTTOM        -Move to Bottom of File
  545. COL [+/-]n    -Move cursor to column n or n characters left (-) or right (+)
  546. DOWN        -cursor down. If in commandline move to next line of
  547.          commandline-history
  548. DOWNADD     -cursor down.  If at bottom of text, add a line.
  549. FIRST        -move to column 1
  550. FIRSTNB     -Move to first non-blank in line.
  551. GOTO dest    -Goto to a position in the text. dest is one of
  552.             BLOCK/START     - Beginning of block (if there's one)
  553.             END         - Last line of block (dito)
  554.             +/-n        - n lines down/up
  555.             n            - to line n
  556. LAST        -move one beyond the last non-space in a line.
  557. LEFT        -cursor left
  558. MAKECURSORVISIBLE -Scrolls an oversized screen so the cursor will become
  559.          visible.
  560. MATCH        -find matching paren. Works with (), [], {}, `' and /* */
  561. PAGEDOWN    -pagedown a partial page (see PAGESET)
  562. PAGELEFT    -page to the left as requested by StyleGuide.
  563. PAGERIGHT    -dito to the right
  564. PAGEUP        -pageup a partial page (see PAGESET)
  565. PING n        -set a text marker (0-9).
  566. PONG n        -move to a previously set text marker (0-9)
  567. RETURN        -if AUTOINDENT is off: (FIRST DOWNADD) else insert line,
  568.          split current line and indent like last line above.
  569. RIGHT        -cursor right
  570. SCREENBOTTOM    -Move cursor to the bottom of the screen.
  571. SCREENTOP    -Move cursor to the top of the screen
  572. SCROLLDOWN    -Scroll down without moving cursor
  573. SCROLLLEFT    -Scroll left without moving cursor
  574. SCROLLRIGHT    -Scroll right without moving cursor
  575. SCROLLUP    -Scroll up without moving cursor
  576. TAB        -forward tab
  577. TOMOUSE     -moves cursor to mouse position
  578. TOP        -Move to Top of File
  579. UP        -cursor up. If in commandline, move to previous line of
  580.          commandline-history
  581. WLEFT        -move to beginning of previous word.  If in the
  582.          middle of a word, move to beginning of current word.
  583. WRIGHT        -move to beginning of next word
  584.  
  585.     Requester:
  586. ARPINSFILE    -INSFILE filerequester \
  587. ARPLOAD     -NEWFILE filerequester    \ You need ASL-, REQTOOLS or
  588. ARPSAVE     -SAVEAS  filerequester    / ARP.LIBRARY for this.
  589. ARPFONT     -SETFONT fontrequester /
  590. BARPSAVE    -save the block to a file with filerequester (see above)
  591.  
  592.  
  593.     Blockoperations:
  594. BCOPY        -copy block before cursor line
  595. BDELETE     -delete the block
  596. BLOCK        -Set start or end of block
  597. BMOVE        -move block before cursor line
  598. BSAVE file    -save the block to a file
  599. BARPSAVE    -save the block to a file with filerequester (see above)
  600. BSOURCE     -source current text block as if it were a script file
  601. CLIPINS     -Insert current contents of clipboard in the text
  602. COPY        -just copies the block to the clipboard
  603. PUSHMARK    -push the currently marked block onto a stack and
  604.          unhighlight the block
  605. POPMARK     -pop the block stack and highlight the popped block
  606. PURGEMARK    -clear the mark stack
  607. SWAPMARK    -PUSHMARK, swap top two marks on stack, POPMARK
  608. UNBLOCK     -clear the block markers for the current window
  609.  
  610.     Search&Replace:
  611. FIND string    -Set the search pattern and do a NEXT
  612. FINDR s1 s2    -Set find and replace patterns and do one find&replace.
  613. FINDSTR string    -Set the search string pattern
  614. NEXT        -find next occurance of search pattern
  615. NEXTR        -find next occurance and replace
  616. PREV        -find previous occurance of search pattern
  617. PREVR        -find previous occurance and replace
  618. REPLACE     -replaces the next strlen(findstr) chars with repstr
  619.          (ie. if deletes as many chars as are in findstr
  620.          and replaces them by the replace-string).
  621.          Useful in a mapping to find the text and another
  622.          to actually replace the text:
  623.  
  624.             map f1 `next'
  625.             map f2 `replace next'
  626.  
  627.          f1 searches for the text, f2 replaces it and looks for
  628.          the next occurence.
  629. REPSTR string    -SET the replace string pattern
  630. GLOBAL what    -turn global search on/off. If XDME cannot find a string in
  631.          one window, it will continue with the next one.
  632.  
  633.     Program:
  634. IF cnd act    -SEE BELOW
  635. IFELSE cnd ifact elseact    -SEE BELOW
  636. PROJECTLOAD    -Recall session
  637. PROJECTSAVE    -Save all window-dimensions, filenames and position of
  638.          iconified windows.
  639. REPEAT cnt comm -SEE BELOW
  640. RESETTOGGLE n    -clear toggle array entry N(0..31)
  641. SCANF ctlstr    -scan the string at the current text position (C scanf)
  642.          example:   (scanf %s)          SEE BELOW
  643. SET var str    -create/modify an internal variable (access w/ $)
  644. SETENV var str    -create/modify an enviroment variable (1.3 ENV:)
  645. SETTOGGLE N    -set toggle array entry N  (0..255)
  646. SOURCE file    -source a script file. '#' in first column for comment
  647. TITLE title    -set window title manually
  648. UNSET var    -delete an internal variable
  649. UNSETENV var    -delete an enviroment variable
  650. WHILE cnd act    -(see below)
  651. TOGGLE n    -flip toggle array entry N (0..255)  (See IF)
  652.  
  653.     AREXX
  654. PORT name cmd    -Send cmd to ARexx-Port name
  655. PROJECTINFO    -Gives some information about the current project:
  656.          result_string="%s %s %d %d %d %d %d %d",
  657.             name, LeftEdge, TopEdge, Width, Height, IWinX, IWinY
  658.          i.e. Name of current window, it's dimensions and position
  659.          if iconified
  660. RX        -ARexx macro, no args    (RX macname)
  661. RX1        -ARexx macro, one arg    (RX1 macname arg1)
  662. RX2        -ARexx macro, two args    (RX2 macname arg1 arg2)
  663. RXRESULT <any>    -Copy <any> into RESULT in an AREXX-script.
  664. SELECT what    -make a window the current one. what is FIRST,LAST,NEXT,
  665.          PREVIOUS,WINDOW=<name>,SAVE or LOAD. SEE BELOW
  666.  
  667.     Preferences
  668. AUTOINDENT what -(De)Activate autoindent (what={on,off,toggle}) with RETURN
  669. AUTOSPLIT what    -(De)Activate autosplit (what={on,off,toggle}). This is an
  670.          alternative to WORDWRAP. AUTOSPLIT only break the line if
  671.          it gets too long and doesn't touch the rest of the text.
  672. BBPEN n     -selects pen n as the block-background-pen
  673. BGPEN pen    -set background pen
  674. BLOCKTYPE type    -type is LINE (old), CHARACTER (like everywhere else) or
  675.          VERTICAL (rectangular block).
  676. CHFILENAME name -change the name of the working file
  677. IGNORECASE what -set case ignore for seaches.  what = on, off, or toggle
  678. INSERTMODE what -set INSERTMODE.  what = on, off, or toggle
  679. FGPEN pen    -Set foreground pen
  680. FOLLOWCURSOR what -XDME will make sure the cursor is visible if you switch
  681.          it on with this command. Usefull on screens that extend over
  682.          the visual area.
  683. GLOBAL what    -turn global search on/off. If XDME cannot find a string in
  684.          one window, it will continue with the next one.
  685. HEIGHT n    -set height in PIXELS for any new windows
  686. HGPEN pen    -set highlight pen
  687. LEFTEDGE n    -set leftedge on the screen in PIXELS for any new window
  688. MAP key map    -map a key to a keymap
  689. MARGIN n    -set WordWrap and paragraph formatting margin
  690.          (related to WORDWRAP and REFORMAT)
  691. MENUADD hdr item cmd    -add menu item
  692. MENUDEL hdr item    -delete menu item
  693. MENUDELHDR hdr        -delete menu header
  694. MENUCLEAR        -delete entire menu
  695. MENUON            -enable menus  (multiple calls are stacked)
  696. MENUOFF         -disable menus (multiple calls are stacked)
  697. MODIFIED what    -set modified flag manually (what={on,off,toggle})
  698. NEWFILE name    -replace current text with new file
  699. PAGESET n    -n PERCENT (0 to 100). page step size relative to the
  700.          current number of rows in the window.
  701. PATTERN pat    -sets the pattern for the filerequesters.
  702. PUBSCREEN name    -open next window on screen "name". Use an empty string to
  703.          turn it off (ie. "pubscreen `'")
  704. REMPATH wild    -Remove one or more symbolic directorys from XDME's
  705.          special path... a */? wildcard is acceptable.
  706. RESIZE cols rows-Resize current window. E.G:  (resize 70 23)
  707. SAVECONFIG    -save current editor configuration to s:dme.config
  708. SAVETABS on/off -Optimize file saves by crunching spaces to tabs.
  709.          The default is OFF.
  710. SETFONT font sz -Set the window's font.  ex:   (setfont topaz.font 11)
  711. SETPARCOL col    -Set the LEFT margin for word wrap mode paragraphing &
  712.          reformat.  MUST be less than MARGIN.
  713. TITLE title    -set window title manually
  714. TABSTOP n    -Set tab stops every n.  does not effect text load.
  715. TMPHEIGHT n    -set window height for next window only, pixels
  716. TMPWIDTH  n    -set window width for next window only,  pixels
  717. TOPEDGE n    -set topedge in the screen in PIXELS for any new window
  718. TPEN pen    -set pen for title bar rendering
  719. UNMAP key    -unmap a key
  720. WIDTH n     -set width in PIXELS for any new window
  721. WORDWRAP what    -Word Wrap mode {on,off,toggle} (related to MARGIN)
  722.  
  723.  
  724.     Other:
  725. ADDPATH path    -Add the specified symbolic directory to XDME's special
  726.          search path (see REF and CTAGS).
  727. CHFILENAME name -change the name of the working file
  728. CTAGS        -search for the tag under the cursor (see below)
  729. ESC        -toggle manual command entry mode
  730. ESCIMM arg    -go into command entry mode prompting with a
  731. EXECUTE comm    -Execute a CLI command
  732.          predefined string.
  733. NULL        -no operation
  734. PICK item    -like POP, but doesn't remove the topmost element from
  735.          stack !
  736. POP item    -Pop something from the stack and store it in item. The
  737.          special item AUTO stores the thing back where it was taken
  738.          from.
  739. PUSH item    -Push an item on the stack. Items are
  740.             POS     - actual cursor position (like PING)
  741.             MODIFIED    - modified flag
  742.             ICONMODE    - iconify-state (!! DO NOT USE !!)
  743.             TABSTOP    - tab-size
  744.             SAVETABS    - Should I convert spaces to tabs ?
  745.             MARGIN    - right margin
  746.             INSERTMODE    - obvious :-)
  747.             IGNORECASE    - for search
  748.             WORDWRAP    - word-wrapping on/off
  749.             WWCOL    - col. of wordwrap
  750.             WINDOW    - position and size of window
  751.             ICON    - position of icon
  752.             PENS    - all four pens
  753.             BLOCK    - like PUSH-/POPMARK
  754.             ED        - actual window. Like SELECT SAVE, but can be
  755.                   nested
  756.             AUTO    - POP only ! This automatically put the topmost
  757.                   thing from stack to its original place.
  758.             DISCARD    - POP only ! Discards the topmost item from the
  759.                   stack.
  760. QUITALL     -leave XDME (NO "PROCEED ?" YET ! BE CAREFULL !)
  761. RECALL        -recall most recently entered command.    Must be used
  762.          from a keymap (c-esc).
  763. REF        -reference string under cursor (see below)
  764. REFCTAGS    -The utimate command for hopping through source. First, we
  765.          try CTAGS and if we don't find anything, we check REF.
  766. SAVEAS file    -save current text under a different name (title
  767.          line name does not change)
  768. SAVEMAP file    -save user keymappings
  769. SAVEOLD     -save current text under current name
  770. SAVESMAP file    -save all keymappings, including system keymaps
  771. SWAP item    -exchange the topmost item on stack with the actual item
  772. UNDELINE    -insert most recently deleted line (only last line saved)
  773. UNDO        -undo current line (must be mapped to a key to work)
  774. VREFCTAGS <name> -like REFCTAGS, but looks for <name>
  775.  
  776.     Windows
  777. ICONIFY     -iconify the window
  778. NEWWINDOW    -open new window using default window parameters
  779. OPENWINDOW geo    -open new window using specified geometry.  Geometry is
  780.          specified as:    +/-leftedge+/-topedge+/-width+/-height,
  781.          where negative numbers denote values relative to the
  782.          width or height of the screen.  For example, the
  783.          following opens a nearly full-screen window leaving
  784.          10 pixels above, below, to the left, and to the right:
  785.  
  786.             openwindow +10+10-10-10
  787.  
  788.          The following opens a window in the upper right hand
  789.          corner of width 320 and height 100.
  790.  
  791.             openwindow    -320+0+320+100
  792.             openwindow    -320+0-0+100        (same thing)
  793.             openwindow    -320-100-0-0        (lower rght hand corner)
  794. QUIT        -close actual window
  795. SETGEOMETRY x y width height -Set x/y position and width/height of
  796.           XDME's window. The width and height are ignored in
  797.           iconified state. If you use negative values, the
  798.           positions/sizes are relative the current
  799.           screen-size (0 0 -1 -1 will open a full-sized
  800.           window !). If a size is null, it's left unchanged
  801.           (move window only).
  802. SHOWLOG     -XDME collects all warnings internally. These can now be
  803.          showed again with this command. This is especially useful
  804.          is you have something wrong in the .edrc-file and the
  805.          warning gets obscured before you can read them.
  806. TITLE title    -set window title manually
  807. TOBACK        -Move active window to back
  808. TOFRONT     -Move active window to front
  809.  
  810.     -------------------------------------------------------------
  811.     -------------    More Info on Complicated Commands    -----------------
  812.     -------------------------------------------------------------
  813.  
  814.     MENUOFF/ON        -This command will enable/disable menus.  Users who have a
  815.              whole bunch of MENUADD commands in their .EDRC should note
  816.              that disabling menus at the beginning will speed up the
  817.              MENUADD commands. Then reenable menus at the end.    These
  818.              calls are stackable in that if you call MENUOFF, say,
  819.              twice, it will take two MENUON commands to restore menus.
  820.              The reverse is not true.
  821.  
  822.     CTAGS   (c-[)   -(1.30B and beyond) Compatible with Aztec's CTAGS program.
  823.              This command searches for the subroutine name under the
  824.              cursor in the associated tags file ("tags" in the directory
  825.              holding the file currently being edited).    Also, the file
  826.              "tags" in directories specified by the special XDME path
  827.              (see ADDPATH and REMPATH) will be searched.
  828.  
  829.              If the tag is found, it loads the file the subroutine
  830.              resides in if neccesary, then WindowToFront()'s the window,
  831.              ActivateWindow()s it, and GOTO's the line where the
  832.              subroutine starts.  The search within the source file is
  833.              anchored to the left column.  If the file is already
  834.              loaded, it is not reloaded.
  835.  
  836.              This enables a programmer to quickly trace subroutines over
  837.              an arbitrary number of files.
  838.  
  839.              The tags file contains one or more lines of the following
  840.              format:
  841.  
  842.              subroutine-name file-name /^search-pattern
  843.              (that's a slash and a carrot, then the pattern)
  844.  
  845.              -- EXAMPLE of 'TAGS' file:
  846.              setpen cmd1.c /^setpen(
  847.              do_up cmd1.c /^do_up(
  848.              --
  849.  
  850.             SPECIAL NOTE:  CTAGS will work even if you are not in the
  851.             directory containing the file.  You can thus place a tags
  852.             file in the directory containing the files it references,
  853.             and the filenames WITHIN the tags file need not be a full
  854.             path.
  855.  
  856.     REF     (c-])   -(1.28d and beyond).  This is a very powerful new command
  857.              that allows you to bring up a reference to a keyword
  858.              with a single keystroke.  This is useful for
  859.              programmers who have on-line documentation or fully
  860.              commented include files. XDME opens a window just big
  861.              enough to fit the reference.
  862.  
  863.              NOTE:  The new CTAGS command may be more suited to your
  864.              application.
  865.  
  866.              The reference keyword is the alpha-numeric string
  867.              currently under the cursor.  REF will search the file
  868.              XDME.REFS in the directories listed by the special XDME
  869.              path (see ADDPATH and REMPATH).  The file must be
  870.              built by the user and each line has the following
  871.              format:
  872.  
  873.              (keyword) (nolines/endstring) (file) (searchstr/@@seekpos)
  874.  
  875.              Surrounding the keywords with `' or () is optional if the
  876.              keyword does not contain spaces.
  877.  
  878.             keyword     -keyword under cursor
  879.             nolines/ends-either a number (the number of lines in the
  880.                      reference) or a string denoting the end of
  881.                      the reference when found.
  882.             file        -the file containing the reference material
  883.             searchstr/@@-search string in file that indicates the
  884.                      beginning of the reference, or two at's
  885.                      (@@) and the seek position in decimal (like
  886.                      @@2343).  The latter method is used mainly
  887.                      for reference- generator programs.
  888.  
  889.              Upon finding a successful keyword match the specified
  890.              file is openned and the seach string searched for.  If
  891.              a seek position was specified no search is made and a
  892.              seek is made to the beginning of the reference.  If
  893.              found, the indicated number of lines (if a number is
  894.              specified for <nolines/ends>) or until a match with
  895.              the endstring (if a string was specified) will be
  896.              placed in a temporary file and a new XDME window
  897.              brought up. The temporary file is then deleted.
  898.  
  899.              When looking for matches, the compare is anchored at the
  900.              beginning of each line in the file.  Thus, any spaces in
  901.              front of the string in the file must be duplicated.
  902.  
  903.              T: must be assigned to a temporary directory, usually RAM:
  904.              See the included example DME.REFS file.  The most common
  905.              things referenced are the autodocs and commented include
  906.              files.
  907.  
  908.              Some modification of the included DME.REFS.* files may be
  909.              required due to differences in include file and autodoc
  910.              format.
  911.  
  912.     SCANF ctlstr    -This is equivalent to the C scanf() function with the
  913.              restriction that only one conversion is allowed, that
  914.              conversion being a string.  Thus:
  915.  
  916.              scanf %s        will place the string under the cursor in
  917.                     the variable $scanf
  918.  
  919.              scanf %4s        The first four chars of the string.
  920.  
  921.              scanf %[0123456789]
  922.                     will scan the string while it contains
  923.                     specified chars (e.g. scan a number)
  924.  
  925.              scanf %[~,]    will scan the string until it finds a ','.
  926.  
  927.             Moreover SCANF now allows to use some more usefull
  928.             arguments:
  929.  
  930.             w   - one word
  931.             l   - the WHOLE line
  932.             b   - all that matches isalnum()
  933.             c   - single character
  934.             t   - text in one line
  935.             a   - all that matches isalpha()
  936.             r   - c-style comment
  937.  
  938.             If you precede one of these with a '+' you will also get
  939.             everything to the left else you get all that is to the
  940.             right. Example:
  941.  
  942.             dummy1[line] = ...
  943.                ^
  944.  
  945.             w:  my1[line]
  946.             +w: dummy1[line]
  947.             a:  my
  948.             +a: dummy
  949.             b:  my1
  950.             +b: dummy1
  951.             c:  m
  952.             +c: m
  953.  
  954.             The variable $scanf may be used as an argument in any
  955.             command.  Example:    (insfile $scanf).
  956.  
  957.             NOTE:  If using $scanf in a macro, you probably want to
  958.             precede it with a \ to prevent it from being evaluated at
  959.             macro-creation time.
  960.  
  961.  
  962.     REPEAT n arg    -Repeat (arg) N times.  Apart from being a number, n can
  963.              also be one of:
  964.  
  965.             line    Current line # (lines begin at 1)
  966.             lbot    #lines to the bottom, including current line
  967.             cleft    column # (cols begin at 0)
  968.             cright    #chars to eol, including current char under
  969.                 cursor
  970.             tr    #char positions to next tab
  971.             tl    #char positions to next back tab
  972.  
  973.             Certain commands can abort a REPEAT loop. Specifically, any
  974.             FIND[R], NEXT[R], or PREV[R] in which the search string is
  975.             NOT found will abort a REPEAT. Most operations which can go
  976.             out of bounds, such as UP, LEFT, RIGHT, DOWN, also abort a
  977.             repeat.
  978.  
  979.             Specifying -1 as N causes REPEAT to go on forever (well,
  980.             actually, 0xFFFFFFFF times) or until an abort.
  981.  
  982.             REPEAT may also be abreviated. Simply type
  983.  
  984.             15 left
  985.  
  986.             This will move the cursor 15 time left. In this construction
  987.             you must specify a number as repeat-count.
  988.  
  989.     IF [!]condition arg
  990.     WHILE [!]condition arg
  991.     IFELSE [!]condition arg else arg
  992.  
  993.         If the specified condition is true, execute the argument.  For
  994.         WHILE, the argument is executed until the condition is false (be
  995.         careful!), but you may abort while with CTRL-c (be fast !).
  996.  
  997.         the optional '!' inverts the logic.
  998.  
  999.         Conditions:
  1000.  
  1001.  
  1002.         #        if toggle entry # is SET.  there are 256 toggles (0..255)
  1003.         t        if On line 1
  1004.         b        if On last line
  1005.         l        if At column 0
  1006.         r        if At end of line (spaces below and beyond)
  1007.         m        if Text has been modified
  1008.         i        if in insert mode
  1009.         x[<=>]# if column position (starts at 1) is (any OR combo of
  1010.             <, =, or >) than some number.  Example:   x<=20
  1011.         y[<=>]# if Line number (starts at 1) is (same as for x)
  1012.         cl        character under cursor is lower case alpha
  1013.         cu        character under cursor is upper case alpha
  1014.         ca        character under cursor is alpha-numeric
  1015.         cn        character under cursor is numeric
  1016.         c[<=>]# character under cursor is ascii code # (# in decimal)
  1017.             optional conditionals as in 'x' and 'y'.
  1018.             # can also be a "string":
  1019.  
  1020.             if c="hwllo" `right tlate "e"'
  1021.  
  1022.             replaces "hwllo" by "hello". The condition is true, if
  1023.             the cursor is on the first char of the string and the
  1024.             string follows behind:
  1025.  
  1026.             This is a test.
  1027.                  ^
  1028.             ifelse c="is" `title c=is' `title c<>is':    c=is
  1029.             ifelse c="test" `title TRUE' `title FALSE':  FALSE
  1030.  
  1031.             # can be a group of chars:
  1032.  
  1033.             while c=[a-zA-Z0-9] ...
  1034.  
  1035.             is the same as
  1036.  
  1037.             while ca ...
  1038.  
  1039.             Beware of spaces in strings and groups: if there are any,
  1040.             you MUST NOT forget to put the condition in XDME's
  1041.             parentheses.
  1042.  
  1043.         cb        cursor within a block
  1044.  
  1045.     INDENT what how
  1046.  
  1047.         The INDENT-command allows to indent and outdent text. It is
  1048.         intelligent in a way that you will NEVER lose any text with it. If
  1049.         the in/outdent would push characters over the limit (left or right),
  1050.         the line is left and INDENT continues with the next line.
  1051.  
  1052.             what:   .        - Current line
  1053.                 n        - line n
  1054.                 $n        - line which is marked by PING n
  1055.                 t        - whole text
  1056.                 b        - whole block
  1057.                 bs        - block start
  1058.                 be        - block end
  1059.                 _        - last line
  1060.  
  1061.             You may create ranges with "what,what". (This is
  1062.             obviously useless with "t" and "b").
  1063.             how:    -        - If there is a minus, text is outdented
  1064.                       instead of indented
  1065.                 .        - Align to multiple of indent-amount instead
  1066.                       of just inserting some spaces at the
  1067.                       beginning
  1068.  
  1069.                 n        - Set indent-amount to n
  1070.                 t        - Set indent-amount to tabsize
  1071.                 c        - Insert not at the beginning but at the
  1072.                       current column.
  1073.  
  1074.         Examples:
  1075.  
  1076.         indent . .ct    - Acts like tab. Text under cursor and beyond is
  1077.                   aligned to next tabstop.
  1078.         indent b .t    - Indent the current block. NOTE: ALL lines are
  1079.                   tabstop-aligned ! This may destroy some of
  1080.                   your formating.
  1081.         indent b -.t    - dito but the block is outdented.
  1082.  
  1083.     PROJECTS:
  1084.  
  1085.     You can save the position of ALL XDME windows via PROJECTSAVE and load
  1086.     them later with PROJECTLOAD or via invoking XDME with
  1087.     XDME_PROJECT_FILE as parameter. This will restore the state of the
  1088.     last PROJECTSAVE. If you are using AREXX, you can get information
  1089.     about the current project via PROJECTINFO which will return the
  1090.     following string in AREXX result-string:
  1091.  
  1092.         path filename winx winy winwidth winheight iconx icony
  1093.  
  1094.     To get this from all windows you can use SELECT.
  1095.  
  1096.     SELECT what
  1097.  
  1098.     SELECT allows to make another window the current one.
  1099.  
  1100.         what:   FIRST, LAST, NEXT, PREVIOUS - obvious, eh ?
  1101.             WINDOW=<name>   - Make window <name> the current one
  1102.             SAVE        - Remember current window
  1103.             LOAD        - restore current window
  1104.  
  1105.     You can SAVE the current window, select another (or more) and LOAD the
  1106.     current window again. This gurantees uninterupted work for the user and
  1107.     is STRONGLY recommended.
  1108.  
  1109.  
  1110.  
  1111.                  FILE PARTICULARS
  1112.  
  1113. No Matter what you set internal tabs to, tabs in disk files will be 8. This
  1114. allows you to use your favorite tabs stops (mine are 4) and still have your
  1115. disk files compatible with TYPE, a printer, etc...  XDME by default doesn't
  1116. bother to optimize when writing out files and simply uses spaces. If you
  1117. (SAVETABS on) before saving (or in your S:.EDRC, etc...), XDME will attempt
  1118. to optimize the file by placing TABS in appropriate places.  XDME will not
  1119. place any TABS after the first single, back, or double quote is encountered
  1120. in a line.  If this does not cover every situation in your particular
  1121. application that you want to be *sure* no tabs will occur in sensitive
  1122. sections, then you should not use (SAVETABS on).
  1123.  
  1124. It should be noted that since XDME removes spaces at the end of the line,
  1125. editing UUENCODED ascii files will not work for uuencoded lines which end
  1126. with a space. The nominal fix is to add an extra character after each
  1127. uuencoded line (anything) in the proper column, which is ignored by the
  1128. UUDECODE program.
  1129.  
  1130. The command to save the current document under the default name is SAVEOLD,
  1131. *not* SAVE.  SAVE is not a valid command.  This is to prevent people who have
  1132. not read the documentation from assuming 'save' takes an argument (and screwing
  1133. up their work).  SAVEOLD does NOT take an argument, SAVEAS does.
  1134.  
  1135. SAVEOLD/SAVEAS do not automatically backup the destination file.  If you are
  1136. working in an enviroment where you are worried about ensuring a viable copy can
  1137. be recovered if your Amiga crashes in the middle of the save, you can write a
  1138. macro to save the file into two places.  Usually, people backup their working
  1139. disks so this is not neccesary.
  1140.  
  1141. Workbench Support:  If XDME is run from the workbench, it will automatically
  1142. construct an icon file when you save a document.  If run from a CLI, no icon
  1143. file is generated.
  1144.  
  1145.                     V
  1146.                   WORKBENCH SUPPORT
  1147.  
  1148. DME V1.26 and beyond support the workbench in the following way:  (1) you can
  1149. click on the XDME icon to bring up DME with the file "unnamed".  (2) you can
  1150. select one or more standard ascii documents which have XDME as the default
  1151. tool. If XDME has no knowlege of a text icon, it uses its own.
  1152.  
  1153.                     VI
  1154.                 COMPILING
  1155.  
  1156. I think you can compile most of XDME with any compiler now (I tried GCC and it
  1157. almost worked but since GCC didn't made better (shorter code than DICE) I
  1158. canceled it)). But I really don't think you will succeed to get a runable
  1159. programm since XDME incorporates some features of DICE which are not found
  1160. anywhere else (what do you think why I use DICE ? :-). Hopefully XDME will
  1161. compile correctly using the DICE-version from FISH. If it ain't work just buy
  1162. DICE from Matthew Dillon. These $50 really don't kill anybody and you get a
  1163. real great compiler.
  1164.